B Binance · The world's largest crypto exchangeBinance Sign up → AD OKX OKX · A leading global crypto exchangeOKX Sign up → AD
📈 Stock analysis tools

🗓️ Stock Market Seasonality

Pick an index or stock for a year-by-month returns heatmap, how often each month rose, weekday effects and a Sell in May check. Yahoo Finance data, not advice.

Loading Data: Yahoo Finance (via our server, may be delayed)

This month

Last price–
Month to date–
Same month in past: mean / median–
Same month in past: % up–
Same stretch, last 10 years–
Year to date–
Best month–
Worst month–
–

Monthly returns

Loading

Average return by month

Bar = mean · white line = median

This month and year against past paths

Loading
–

Seasonal sayings, checked against the data

Loading

Returns by year

–

By weekday and trading day of month

–

For information only, not investment advice. Prices come from Yahoo Finance via our server and may be delayed 15–20 minutes or more depending on the exchange, or interrupted. Charts: TradingView Lightweight Charts™

What this tool does

Markets are full of calendar sayings: "Sell in May and go away", the January effect, a weak September, the Santa Claus rally. This tool builds a year-by-month returns heatmap from the full monthly history of an index such as the KOSPI, S&P 500, Nasdaq, Dow or Nikkei 225, or of a single stock such as Samsung Electronics or Apple, and reports each month's mean, median, share of up years and sample size so you can see whether the sayings match the record. It compares the current month with the same month and the same stretch in past years, and uses the last 10 years of daily bars to break returns down by weekday and trading day of the month and to overlay this year's path on past years.

How it is calculated

Prices are fetched by our server from Yahoo Finance. Monthly return = last close of the month ÷ last close of the previous month − 1; quarters and years chain the monthly returns. For long-lived symbols Yahoo shortens the full monthly history, so the tool takes the last close of each month from the full daily history and computes the same way. Stocks and ETFs use the adjusted close by default (dividends and splits, assuming dividends are reinvested); "Price only" switches to the plain close. For indices the two are the same. Dates follow the exchange's time zone. The mean (arithmetic), median and % up (share of years above zero) use closed months only, leaving out the month in progress and the first month of the data (no prior close, so it is measured from the open). The standard error of a single monthly mean (standard deviation of monthly returns ÷ √samples per month) is shown alongside. Cell color is fullest at the 90th percentile of absolute monthly returns rounded up to a round number (1.7 times that for quarters and 3.4 times for years, also rounded up). The current and previous months are overwritten with daily bars reloaded about every 5 minutes. "Same stretch" uses the last 10 years of daily bars: for each year, the return from the previous month's last close to the same calendar date. The sayings check compares November–April with May–October (six months chained), January with the other months, how often January and February–December moved the same way (against simply picking the more common outcome), September with all months, the last 5 trading days of December plus the first 2 of January (against any 7 trading days), and the daily return on the last trading day plus the first 3 of the month (against the other days). In the weekday and day-of-month tables, daily return = close ÷ prior close − 1, range = (high − low) ÷ prior close, volume is relative to the prior 20-day average, and t = (bucket mean − mean of the other days) ÷ standard error (Welch).

Reading the screen, section by section

Picking a symbol and view buttons

Type a name or code such as Apple, Nvidia, Samsung Electronics or SK hynix into the search box and press Go, or pick from the grouped list beside it. Six digits are tried on the KOSPI (.KS) first and then the KOSDAQ (.KQ); four digits are read as Tokyo (.T) stocks. The buttons below are shortcuts to the KOSPI, KOSDAQ, S&P 500, Nasdaq, Dow and Nikkei. Monthly/Quarterly switches the heatmap and average bars between January–December and Q1–Q4, and With dividends/Price only chooses between the adjusted close and the close. Indices have no dividend adjustment, so that button is hidden for them. Interest rates are left out of the list because their value is already a percentage, but you can still enter one by symbol. The symbol and view settings stay in the address, so anyone opening your link sees the same screen.

This month card

The top card compares the month in progress with the same month in past years. Its top right shows the time of the latest quote in the exchange's city time (New York for US stocks) and whether the market is open. US dates and months follow New York dates, so on the morning of the 1st in Asia a US stock may still show the last trading day of the previous month. Month to date runs from the previous month's last close to the latest value; while the market is open it includes today's unfinished value and changes with each refresh. Past averages and up-month rates use finished months only, leaving out the current month and the first month of data, so the comparison stays fixed however this month moves. The text below adds where this month ranks, including this year, and the standard error of a monthly average.

  • Price: change from the previous close; US-dollar and yen stocks also show a won value at today's exchange rate
  • Month to date: versus last month's final close, with the date and number of trading days so far
  • Past average / median for this month: values from finished months
  • Past up rate for this month: how many times out of how many it rose
  • Last 10 years, same stretch: from the 1st of the same month to today's date each year
  • Year to date: versus last year's final close
  • Best and worst month on record: among finished months

Monthly return heatmap

Each row is a year and each cell a month (or quarter), with the annual figure on the far right. Monthly return = that month's last close ÷ the previous month's last close − 1; quarters and years chain monthly returns together. Darker cells mean bigger moves; colour peaks at the 90th percentile of absolute monthly returns rounded up to a tidy value (1.7 times that for quarters, 3.4 times for years). A dashed border marks a month still in progress, and faint text marks cells left out of the statistics because the earlier data is missing. Hover a cell to see the previous and current month's closes. The four rows at the bottom (average, median, up rate, sample) let you read each month down the column. For symbols with long histories the months are built from the full daily record, and the note under the table says so.

Average return by month

These bars redraw the heatmap's average row. Bar height is the month's average return, the short line across the bar is the median, and the current month is highlighted. Hover a bar for the average, median, up rate and how many times out of how many it rose; the line below gives the range of sample sizes across months. Months where average and median are far apart are often months where one or two unusually large years pulled the average. With a few dozen samples per month, small gaps between bars arise easily by chance, so compare them with the standard error quoted in the top card (monthly standard deviation ÷ √sample size) to judge how large a difference really is. In the quarterly view there are four bars.

This month and year versus the past

Using the last 10 years of daily bars, this chart overlays the cumulative return path of the current month (or year) on the paths of the same month (or year) in past years. Path = that day's close ÷ the previous month's (year's) last close − 1, and the horizontal axis counts trading days, not calendar days (holidays are skipped). The thick line is this year, thin lines are past years, the band is the past low-to-high range and a separate line is the past average. The average and range are drawn only where at least half of the past years reach that trading day. Hover to see this year's value, the past average and the range at that day. The text below gives the past average and range at today's trading day, and what the past averaged from that point to month-end (year-end) and how many years rose. While the market is open the last point is today's unfinished value, so the end of the line moves with each refresh.

Seasonal sayings, checked against the data

Six well-known calendar sayings are tested on this symbol's record. Each card shows two boxes side by side with the average, median, up rate and sample size of the two groups being compared, and a sentence below states the result. The first four use the full monthly record, the last two the last 10 years of daily bars, and the period used is shown under each card. If the sample is too small, the card only says so. For the last saying, t = difference of the two averages ÷ standard error (Welch's method); an absolute value below 2 is a size that chance produces often. Testing many sayings at once means one may look large by chance, and past differences are no guarantee of future ones.

  • Sell in May: the November–April and May–October halves (6 months each) of every year
  • January effect: January versus the other months
  • As January goes, so goes the year: how often January and February–December moved the same way, compared with always picking the more common direction
  • September is weak: September versus all months
  • Santa rally: the last 5 trading days of December plus the first 2 of January, versus any 7 trading days
  • Turn of the month: daily returns on the last trading day plus the first 3, versus all other days

Returns by year

Bars show each year's return (monthly returns chained together). This year's bar is highlighted because it is still running, and years with missing earlier months, such as a first year that starts mid-way, are drawn faint and left out of the statistics. With many years only every fifth label is shown; hover a bar for the exact value. The text below gives how many finished years rose and what share, the average and median, the best and worst years, and this year so far. Next to the title you see the basis (with dividends or price only) and the date this year's figure runs to. US indices such as the S&P 500 and Nasdaq 100 are price indices without dividends; to see returns including dividends, pick a US ETF that tracks the index.

Returns by weekday and trading day of the month

Using only closed days in the last 10 years (or 5 or 1) of daily bars, days are grouped by weekday or by position in the month (+1 to +4, middle, −4 to −1), and the average daily return, range and volume are shown as bars and a table. Daily return = close ÷ previous close − 1, so Monday's figure includes the change over the weekend. Weekdays follow the exchange's own date, so a US Monday session takes place on Monday night into Tuesday morning in Korea. Range = (high − low) ÷ previous close, volume is relative to the average of the prior 20 trading days, and the volume measure is dropped for symbols where most volume data is missing. The t value in the table measures the gap between that bucket's average and all other days with Welch's method; with many buckets, one may pass 2 by chance.

Keeping it open

This page reloads the last 10 years of daily bars every 5 minutes (the same interval as the server's daily cache) and updates this month's and last month's cells, the top card and the end of the path chart. The full monthly history is loaded only once, so past statistics stay put; only this month's and this year's numbers move. In a background tab refreshing pauses and resumes at once when you return. Prices come from Yahoo Finance through our server and can be 15 to 20 minutes or more late depending on the exchange. When checking in, look at ① month to date against the past average for the same stretch and ② where this year's line sits within the past band. US markets open during the Korean night, so during the Korean day the US numbers barely change. A live candlestick chart or a drawdown tool alongside helps judge the size of today's move.

Things to know

Frequently asked questions

How are long-lived symbols such as the S&P 500, Nasdaq, Nikkei 225 or Apple handled?

Yahoo Finance shortens the full monthly history of very long-lived symbols, either into 3-month bars or to roughly the last 500 months (from about 1985). For those symbols the tool loads the full daily history once and takes the last close of each month, which is the same value a monthly bar would give, so the calculation is unchanged and the record is longer: from 1965 for the Nikkei 225 and from December 1980 for Apple, for example. The start follows whatever range Yahoo sends and is shown next to the heatmap title. If the full daily history cannot be loaded, the tool uses the monthly bars it received (only the last 10 years when 3-month bars came back) and says so under the heatmap.

What is the difference between "With dividends" and "Price only"?

"With dividends" uses the adjusted close, which reflects dividends and splits and assumes dividends are reinvested. "Price only" uses the close, which reflects splits only, so returns come out lower by the dividends. For indices without dividends the two match and the buttons are hidden.

Which prices does the current month use?

From the last close of the previous month to the latest quote. Quotes come from Yahoo Finance via our server and can be 15–20 minutes late or more depending on the exchange; during trading hours they are reloaded about every 5 minutes. The as-of time and whether the market is open are shown at the top right of the card, in the exchange's time zone. The month in progress is not included in the mean, median or % up.

Can this tool tell me whether "Sell in May" works?

It shows how November–April and May–October actually did in the past, how many years November–April came out ahead, and whether May–October still rose on average. It does not say this will continue. The same saying gives different results across indices and periods, and a past gap in averages is no guarantee for the future.

For reference only, not investment advice. Prices are fetched by our server from Yahoo Finance and may be delayed.

📚 Worth reading
🧭Reading Sector Trends: Sector Rotation on a Chart→ 📅Volume, Dollar Volume and Price Action Around Options Expiration in US Stocks→ 🧺What an index actually measures→ 🌐Using Stock Index Futures to Read the Overnight Market→
← All stock tools